-
Notifications
You must be signed in to change notification settings - Fork 1.7k
En/db resolver #2140
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
En/db resolver #2140
Conversation
Bumps [go.opentelemetry.io/otel/exporters/prometheus](https://github.com/open-telemetry/opentelemetry-go) from 0.59.0 to 0.59.1. - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](open-telemetry/opentelemetry-go@exporters/prometheus/v0.59.0...exporters/prometheus/v0.59.1) --- updated-dependencies: - dependency-name: go.opentelemetry.io/otel/exporters/prometheus dependency-version: 0.59.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]>
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.243.0 to 0.244.0. - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](googleapis/google-api-go-client@v0.243.0...v0.244.0) --- updated-dependencies: - dependency-name: google.golang.org/api dependency-version: 0.244.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <[email protected]>
Bumps [gofr.dev](https://github.com/gofr-dev/gofr) from 1.42.4 to 1.42.5. - [Release notes](https://github.com/gofr-dev/gofr/releases) - [Commits](v1.42.4...v1.42.5) --- updated-dependencies: - dependency-name: gofr.dev dependency-version: 1.42.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <[email protected]>
|
@Umang01-hash Can you add more details on sequence of R(Read) and W(Write) cases under which read and write replicas would be selected ? |
Hey @gizmo-rt we first determine is a query is read/write and if it is a read query we check if healthyReplica is available or not. If the replica is available we select it and send the read query to it and if the replica is not available we send it to primary If all replicas are unhealthy at time of a read query and fallback is enabled, the read falls back to the primary. If fallback is disabled, the read fails with an error. If a replica experiences multiple failures, it's circuit breaker opens and replica is temporarily skipped for queries. This timeout period is 30 seconds by default and we allow 5 failures for replica before cicuit breaker is opened. For an example sequence like R,R,W,R: 1st R: Routed to replica 2nd R: Routed to next replica (depends on which strategy is choosen random or round-robin) 1st W: Routed to primary 3rd R: Routed to next replica |
…tainer's DB within dbresolver module only
|
As reported by @Umang01-hash, here is a metric for other people's reference. We are good to go with this PR. |
LGTM. Since the PR has been pending for a while, we’ll go ahead and merge it.




Pull Request Template
Description:
What is DBResolver?
Adds a DBResolver module to GoFr, which provides automatic read/write splitting for SQL databases.
HTTP Method: Write operations (
POST,PUT,PATCH,DELETE) → Primary |Read operations (
GET) → ReplicasSeamlessly wraps the existing SQL datasource: does not require any application code changes for existing queries.
Developers interact with c.SQL exactly as before; all routing and failover are fully transparent.
Motivation & Benefits
Example Usage:
Configuration Example:
Testing Strategy:
Primary and Replicas launched with docker-compose (primary:3306, replicas:3307/3308)
Replication automated by setup scripts; seed data from SQL dump and app endpoints
Load Testing: Performed with Apache JMeter simulating high-concurrency API requests (both reads and writes)
Results:
Zero error rate; throughput and latency showed no regression compared to the baseline.
Read/write split is fully performant, and scaling is achieved without application change.
Checklist:
goimportandgolangci-lint.Thank you for your contribution!